#include<iostream>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
using namespace std;
int main()
{
   /* FILE* fp = fopen("test.c","r");
    if(!fp)
    {
        printf("错误码：%d,错误信息：%s\n",errno,strerror(errno));
       perror("");
    }*/
    pid_t id=fork();
    if(id < 0)   
    printf("错误码：%d,错误信息：%s\n",errno,strerror(errno));
    else if(id==0)
    {
        int cnt=10;
        while(cnt--)
        {
            cout<<"我是子进程，pid:"<<getpid()<<endl;
            sleep(1);
        }
        exit(100);
    }
    //父进程
    //回收子进程
    int status=0;
    pid_t rid=waitpid(id,&status,0);
    if(rid>0)
    {
        //回收成功，不成功则阻塞
        if(WIFEXITED(status))
        {
            int n=WEXITSTATUS(status);
            cout<<"子进程正常退出，退出码是："<<n<<endl;
        }
        else cout<<"子进程异常退出！"<<endl;
    }
    else
    {
        //回收失败
        perror("");
    }
    while(true)
    {

        cout<<"我是父进程，pid:"<<getpid()<<endl;
        sleep(1);
    }
    return 0;
}